草庐IT

Android SurfaceView Canvas 用线程绘制

全部标签

c# - 对 C# 循环中的多线程感到困惑

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C#CapturedVariableInLoop我是多线程编程的新手。当我运行下面的代码时,只有最后一个child被执行。有人能告诉我发生了什么事吗?非常感谢。privatevoidProcess(){DictionarydataDict=newDictionary();dataDict.Add(1,2000);dataDict.Add(2,1000);dataDict.Add(3,4000);dataDict.Add(4,3000);foreach(KeyValuePairkvpindataDict){Co

c# - ConcurrentDictionary 对象 - 通过不同的线程读写

我想在我的应用程序中使用ConcurrentDictionary,但首先我需要确保我正确理解它的工作原理。在我的应用程序中,我将有一个或多个线程写入字典或从字典中删除。而且,我会有一个或多个线程从字典中读取。可能同时发生。我是否正确认为ConcurrentDictionary的实现会处理所有必需的锁定,而我不需要提供自己的锁定?换句话说,如果一个线程正在对字典进行写入或删除操作,那么读取线程(或另一个写入线程)将被阻塞,直到更新或删除完成为止?非常感谢。 最佳答案 当前的实现混合使用了strip锁(我昨天在https://stack

c# - HttpClient.SendAsync 使用线程池而不是异步 IO?

所以我一直在深入研究HttpClient.SendAsync的实现通过反射器。我有意想知道这些方法的执行流程,并确定调用哪个API来执行异步IO工作。探索里面的各个类之后HttpClient,我看到它在内部使用HttpClientHandler源自HttpMessageHandler并实现其SendAsync方法。这是HttpClientHandler.SendAsync的实现:protectedinternaloverrideTaskSendAsync(HttpRequestMessagerequest,CancellationTokencancellationToken){if(r

c# - 为什么运行一百个异步任务比运行一百个线程花费的时间更长?

为什么运行一百个异步任务比运行一百个线程花费的时间更长?我有以下测试类:publicclassAsyncTests{publicvoidTestMethod1(){vartasks=newList();for(vari=0;i();for(vari=0;iLongRunningOperationAsync(){varsw=Stopwatch.StartNew();awaitTask.Delay(500);Debug.WriteLine("Completedat{0},took{1}ms",DateTime.Now,sw.Elapsed.TotalMilliseconds);return

c# - Winforms WPF Interop - WPF 内容无法绘制

我有一个WinForm,它使用ElementHost来显示WPFUserControl。每50次左右一次,当窗体加载WPF内容时无法绘制。您可以透过WinForm镶边看到下面的任何内容。调整窗口大小会显示WPF内容。这是一个已知问题吗?谁能建议解决方法? 最佳答案 我们以前遇到过这类问题。请参阅此WPF论坛post有关我们特定口味的更多信息(我不知道这是否是同一问题)。我们发现唯一可行的方法是更改ElementHost的大小。_elementHost.Width++;这是一个彻头彻尾的黑客,丑陋的,我什至都不好意思发布它。但没有别的

c# - 在四核上使用线程可将代码速度提高 65%?

这个样本code在四核处理器上比较串行方法和线程方法。该代码仅使用GetPixel()从4个图像中读取所有像素。我发现速度提高了大约65%,为什么它不等于75%,因为我有4个内核并且所有内核都已被充分利用?附言:你能检查代码吗,因为我没有做任何I/O,并且没有其他进程在机器上运行(正常的Windows进程) 最佳答案 它可以是任何数量的东西。想到的一对夫妇管理不同线程的开销。其他进程正在同时使用系统中的资源。 关于c#-在四核上使用线程可将代码速度提高65%?,我们在StackOverf

c# - 在 GDI+ 中绘制坐标的硬界限是什么?

我这样渲染插值曲线:e.Graphics.DrawLines(newPen(Color.Red),_interpolationPoints.ToArray());有时会抛出OverflowException。检查_interpolationPoints数组显示了一些非常大的科学计数值,例如{X=0.0Y=-1.985174E+10}我怀疑Y=-1.985174E+10是GDI+无法处理的值。这很好,但是我可以绘制的最大/最小X和Y值是多少,因此可以限制数据(并警告用户)而不是在绘制期间捕获溢出异常?限制是否记录在案?例如,我想做这样的事情:if(yValfloat.MaxValue)t

c# - 什么是 C# 线程类型?

在三种线程类型(内核级、用户级和混合)之间,C#(或更普遍的.NET)使用哪种类型? 最佳答案 内核线程(1:1)术语“内核线程”可用于指代完全在内核空间中运行的实际线程,也可指代由内核调度的用户空间线程。术语“内核支持”线程指的是后者,即在用户空间中运行但由内核促进的线程,这通常意味着内核调度它们。内核线程享有特权,可以访问用户模式线程禁止访问的内容。看看维基百科上的“Ring(ComputerSecurity)”。在Windows上,用户模式对应于Ring3,而内核模式对应于Ring0。用户级线程(N:1)“用户级线程”通常是指

c# - 从任何线程捕获未处理的异常

编辑这个问题的答案有帮助谢谢我很感激你的帮助:)但我最终使用了:http://code.msdn.microsoft.com/windowsdesktop/Handling-Unhandled-47492d0b#content原始问题:我想在我的应用程序崩溃时显示一条错误消息。目前我有:App.xaml:App.xaml的代码隐藏:namespaceWpfApplication5{publicpartialclassApp:Application{privatevoidApp_DispatcherUnhandledException(objectsender,DispatcherUnh

c# - 线程和 lambda 表达式

下面两段代码有什么区别?使用第二个会有任何问题吗?场景1:privatevoidLog(Exceptione){ThreadPool.QueueUserWorkItem(newWaitCallback(Log),e);}privatevoidLog(objectobj){Exceptione=(Exception)obj;Logger.Log(e);}场景2privatevoidLog(Exceptione){ThreadPool.QueueUserWorkItem((obj)=>{Logger.Log(e);});}在场景2中,我没有将异常作为参数传递给ThreadPool。异常对象